package cc.bookcloud.tool.ocr.common.parsetext.feature;

import com.alibaba.fastjson.JSONArray;
import cc.bookcloud.tool.ocr.util.ocr.OcrTextParseUtil;
import lombok.Data;

import java.util.List;

/**
 * @Desc: 火车票特征识别
 * @Version: 2.0
 * @Author: John Goo
 * @Date: 2024/11/29 11:37
 **/

@Data
public class TrainTicketFeatureTemplate extends InvoiceFeatureTemplateAbstract {



    // 头部,火车票编号
    private String titleByTicketNo;



    // 相近位置迭代分析
    public void titleByTicketNo(Integer pos, String text, JSONArray array){
        // 检测点 ticketNo ,128Z040201
        Boolean isTrainNo = OcrTextParseUtil.isTrainTicketNo(pos, text);
        if(isTrainNo){

            // 当前坐标点
            JSONArray currCoordinate = array.getJSONArray(pos).getJSONArray(0);
            int x = currCoordinate.getJSONArray(0).getInteger(0);
            int y = currCoordinate.getJSONArray(0).getInteger(1);
            // 定点排序 ：当前位置pos取正负5
            List subList = array.subList(pos-5>=0 ? pos-5:0, pos+5<=array.size() ? pos+5 : array.size());


            // 类型： 左-->右
            List subArray = fixedPointSort(x,y,subList);
            System.out.println(" =========== 排序，pos:"+pos+",text:"+text+",数组："+subArray);


            for(int i=0; i<subArray.size(); i++){
                JSONArray rowArray = (JSONArray) subArray.get(i);
                String text2 =rowArray.getJSONArray(1).getString(0);
                int bX = rowArray.getJSONArray(0).getJSONArray(0).getInteger(0);
                int bY = rowArray.getJSONArray(0).getJSONArray(0).getInteger(1);

                // 重新定位 ，P1-->P2 左右型已排序
                isTrainNo = OcrTextParseUtil.isTrainTicketNo(pos, text2);
                if(isTrainNo && (x+y == bX+bY)){

                    // 再遍历subArray子集
                    List list = subArray.subList(i,subArray.size());
                    for(Object row : list){
                        JSONArray suArr = (JSONArray) row;
                        String text3 = suArr.getJSONArray(1).getString(0);
                        // 找右则 "检票" 标志位置 （同行）
                        if(text3.contains("检票")){
                            // 计算
                            coordinateCalculate(currCoordinate,suArr);
                            totalScore =  totalScore + 100;
                            // 终止
                            return;
                        }

                        // .....其它情况
                    }




                }

            }






          //   int newPost = (pos-1)<0 ? 0 : pos-1;
           // String preText = array.getJSONArray(newPost).getJSONArray(1).getString(0);
            // 火车票头的情况一：Z38K046603 ***  检票口   可能上下
            // 火车票头的情况二：Z38K046603 ***  售       可能上下
            // 火车票头的情况三：Z38K046603 ***  检票:    可能上下
            // 火车票头的情况四：Z38K046603 ***  室       可能上下
            // 火车票头的情况四：Z38K046603 ***  站       可能上下   ===> 相对2、3位置
            // 匹配： '检票口' or '检票:'  ，同类合并
            //String t1  = array.getJSONArray(pos + 1).getJSONArray(1).getString(0);
//            JSONArray t1Array =  array.getJSONArray(pos + 1);
//            String t1  = t1Array.getJSONArray(1).getString(0);
//            if(t1.contains("检票")){
//                // 计算
//                coordinateCalculate(currCoordinate,t1Array);
//                totalScore =  totalScore + 100;
//            }else if(pos > 0 && pos < 5){
//                // 未匹配,当前pos为基准取上一位
//                //String t2  = array.getJSONArray(pos - 1).getJSONArray(1).getString(0);
//                JSONArray t2Array = array.getJSONArray(pos - 1);
//                String t2  = t2Array.getJSONArray(1).getString(0);
//                if(t2.contains("检票")){
//                    // 匹配到内容
//                    // 计算
//                    coordinateCalculate(currCoordinate,t2Array);
//                    totalScore =  totalScore + 100;
//                }
//            }



        }
    }

    private void coordinateCalculate(JSONArray p1,JSONArray p2){
        /** 取当ticketNo 坐标点*/
        JSONArray f1 = p1.getJSONArray(0);
        // 原15 ，调整到30 ，@todo 数据偏移的问题
        coordinate.add(0,f1.getInteger(0) - 130);
        coordinate.add(1,f1.getInteger(1) - 130);

        // 计算width,height
        JSONArray f2 = p2.getJSONArray(0);
        // 矩形第二个点
        int x = f2.getJSONArray(1).getInteger(0) + 15;
        int y = f2.getJSONArray(1).getInteger(1) - 15;
        // 计算
        width = x -  coordinate.getInteger(0);
        // @todo 验证间距
        int DIST = 50;
        height = (int) (width/rate) + DIST;

    }










    public TrainTicketFeatureTemplate(String type, String typeDesc){
        super(type,typeDesc);
    }

    public TrainTicketFeatureTemplate() {

    }







}
